#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e3+5;

multiset<int> s; // 使用 multiset 是为了一个冒险者做过任务之后不能再做了, 使用数组无法实现
int tsk[N][N];
int mx_tsk[N];
int cnt[N];


void solve(){
	int m, n;
	cin >> m >> n;
	for (int i=1;i<=m;i++) {
		int tmp;
		cin >> tmp;
		s.insert(tmp);
	}
	
	
	for (int i=1;i<=n;i++) {
		cin >> cnt[i];
		for (int j=1;j<= cnt[i];j++) {
			cin >> tsk[i][j];
		}
		sort(tsk[i]+1, tsk[i]+1+cnt[i], greater<int>());
	}
	int ans=0;
	int k=0; // k 表示任务最多的村庄的任务个数
	for (int i=1;i<=n;i++) {
		k = max(k, cnt[i]);
	}
	
	
	for (int i=1; i<=k;i++) { // 至少需要 K 个人
		int mx=0; // 记录任务的最大值
		for (int j=1;j<=n;j++) {
			mx = max(mx, tsk[j][i]);
		}
		auto it = lower_bound(s.begin(), s.end(), mx); // 找到第一个 >= mx 的值
		if (it == s.end()) {
			// 没找到 
			cout << "-1" << '\n';
			return;
		}
		ans += *(it);
		// 注意用过就不能再用了
		s.erase(it);
	}
	
	cout << ans << '\n';
}



signed main() {
	int t;
	t=1;
	while(t--){
		//TODO
		solve();
	}
	return 0;
}
